package com.platform.service;

import com.alibaba.fastjson.JSON;
import com.platform.dao.SysConfigDao;
import com.platform.entity.SysConfigEntity;
import com.platform.util.SysConfigUtil;
import com.platform.utils.RRException;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 系统配置信息
 *
 * @author lipengjun
 * @email 939961241@qq.com
 * @date 2016年12月4日 下午6:49:01
 */
@Service("sysConfigService")
public class SysConfigService {
	@Autowired
	private SysConfigDao sysConfigDao;
	
	
	
	public void save(SysConfigEntity config) {
		sysConfigDao.save(config);
	}

	private void refresh(SysConfigEntity config) {
		if("system".equals(config.getType())) {
			SysConfigUtil.putSystemConfig(config.getKey(), config.getValue());
		}else {
			
		}
		
	}
	
	public void update(SysConfigEntity config) {
		sysConfigDao.update(config);
		refresh(config);
	}

	public void updateValueByKey(String key, String value) {
		sysConfigDao.updateValueByKey(key, value);
		refresh(key,value);
	}
	/**
	 * 历史遗留接口
	 * @param key
	 * @param value
	 */
	private void refresh(String key, String value) {
		SysConfigUtil.putSystemConfig(key, value);
	}

	public void deleteBatch(Long[] ids) {
		sysConfigDao.deleteBatch(ids);
		SysConfigUtil.clear();
	}

	public List<SysConfigEntity> queryList(Map<String, Object> map) {
		return sysConfigDao.queryList(map);
	}

	public int queryTotal(Map<String, Object> map) {
		return sysConfigDao.queryTotal(map);
	}

	public SysConfigEntity queryObject(Long id) {
		return sysConfigDao.queryObject(id);
	}

	public String getValue(String key, String defaultValue) {
		String value = sysConfigDao.queryByKey(key);
		if(StringUtils.isBlank(value)){
			return defaultValue;
		}
		return value;
	}
	
	public <T> T getConfigObject(String key, Class<T> clazz) {
		String value = getValue(key, null);
		if(StringUtils.isNotBlank(value)){
			return JSON.parseObject(value, clazz);
		}

		try {
			return clazz.newInstance();
		} catch (Exception e) {
			throw new RRException("获取参数失败");
		}
	}
    public Map<String,String> getMap(String type){
    	return getMap(type,true);
    }
    public Map<String,String> getMap(String type,boolean isAll){
		Map<String,Object> params = new HashMap<String,Object>();
		params.put("type", type);
		if(!isAll) {
			params.put("status", 1);
		}
    	List<SysConfigEntity> configs = sysConfigDao.queryList(params);
    	if(configs == null) {
    		return null;
    	}
    	Map<String,String> configMap = new HashMap<String,String>();
    	for(SysConfigEntity sysConfig:configs) {
    		configMap.put(sysConfig.getKey(), sysConfig.getValue());
    	}
    	return configMap;
    }

}
